home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / newlooklib.lha / newlook / createarrowbutton.c < prev    next >
C/C++ Source or Header  |  1993-10-24  |  4KB  |  174 lines

  1. /*
  2.  *  CREATEARROWBUTTON.C
  3.  */
  4.  
  5. #include "newlook.h"
  6.  
  7. static SHORT northarrow_pairs[]= {
  8. 0,3,  /* ...**... */
  9. 3,0,  /* ..*..*.. */
  10. 4,0,  /* .*....*. */
  11. 7,3,  /* *......* */
  12.  
  13. 6,3,  /* ...**... */
  14. 4,1,  /* ..****.. */
  15. 3,1,  /* .**..**. */
  16. 1,3   /* **....** */
  17. };
  18.  
  19. static SHORT southarrow_pairs[]= {
  20. 0,0,  /* *......* */
  21. 3,3,  /* .*....*. */
  22. 4,3,  /* ..*..*.. */
  23. 7,0,  /* ...**... */
  24.  
  25. 6,0,  /* **....** */
  26. 4,2,  /* .**..**. */
  27. 3,2,  /* ..****.. */
  28. 1,0   /* ...**... */
  29. };
  30.  
  31. static SHORT westarrow_pairs[]= {
  32. 5,0,  /* ....** */
  33. 0,2,  /* ..**.. */
  34. 5,4,  /* **.... */
  35.       /* ..**.. */
  36.       /* ....** */
  37.  
  38. 7,0, 5,0,      /* .....*** */
  39. 5,1, 2,1,      /* ..****.. */
  40. 2,2, 0,2, 2,2, /* ***..... */
  41. 2,3, 5,3,      /* ..****.. */
  42. 5,4, 7,4       /* .....*** */
  43. };
  44.  
  45. static SHORT eastarrow_pairs[]= {
  46. 0,0,  /* **.... */
  47. 5,2,  /* ..**.. */
  48. 0,4,  /* ....** */
  49.       /* ..**.. */
  50.       /* **.... */
  51.  
  52. 0,0, 2,0,      /* ***..... */
  53. 2,1, 5,1,      /* ..****.. */
  54. 5,2, 7,2, 5,2, /* .....*** */
  55. 5,3, 2,3,      /* ..****.. */
  56. 2,4, 0,4       /* ***..... */
  57. };
  58.  
  59.  
  60. struct Gadget *CreateArrowButton(x,y,nswe,id)
  61. SHORT x,y;
  62. STRPTR nswe;
  63. USHORT id;
  64. {
  65.   struct Gadget *g;
  66.   struct Border *b, *a;
  67.   SHORT w=16, h=8;
  68.  
  69.   ULONG UserHandle= SetNewLookHandle(PRIVATE_HANDLE);
  70.  
  71.   if(g= (struct Gadget *)SmartAllocate(GADGETSIZE))
  72.   {
  73.     if(a= (struct Border *)SmartAllocate(BORDERSIZE))
  74.     {
  75.       a->TopEdge    = 1+1;
  76.       a->FrontPen   = 1;
  77.       a->BackPen    = 0;
  78.       a->DrawMode   = JAM1;
  79.       a->NextBorder = (struct Border *)NULL;
  80.  
  81.       switch(*nswe)
  82.       {
  83.         case 'n': case 'u':
  84.           a->LeftEdge = 2+2;
  85.           a->Count    = 4;
  86.           a->XY       = &northarrow_pairs[0];
  87.           break;
  88.  
  89.         case 'N': case 'U':
  90.           a->LeftEdge = 2+2;
  91.           a->Count    = 8;
  92.           a->XY       = &northarrow_pairs[0];
  93.           break;
  94.  
  95.         case 's': case 'd':
  96.           a->LeftEdge = 2+2;
  97.           a->Count    = 4;
  98.           a->XY       = &southarrow_pairs[0];
  99.           break;
  100.  
  101.         case 'S': case 'D':
  102.           a->LeftEdge = 2+2;
  103.           a->Count    = 8;
  104.           a->XY       = &southarrow_pairs[0];
  105.           break;
  106.  
  107.         case 'w': case 'l':
  108.           a->LeftEdge = 2+3;
  109.           a->Count    = 3;
  110.           a->XY       = &westarrow_pairs[0];
  111.           ++w;
  112.           ++h;
  113.           break;
  114.  
  115.         case 'W': case 'L':
  116.           a->LeftEdge = 2+2;
  117.           a->Count    = 11;
  118.           a->XY       = &westarrow_pairs[6];
  119.           ++h;
  120.           break;
  121.  
  122.         case 'e': case 'r':
  123.           a->LeftEdge = 2+4;
  124.           a->Count    = 3;
  125.           a->XY       = &eastarrow_pairs[0];
  126.           ++w;
  127.           ++h;
  128.           break;
  129.  
  130.         case 'E': case 'R':
  131.           a->LeftEdge = 2+2;
  132.           a->Count    = 11;
  133.           a->XY       = &eastarrow_pairs[6];
  134.           ++h;
  135.           break;
  136.  
  137.         default:
  138.           a= (struct Border *)SmartFree(a);
  139.           break;
  140.       }
  141.  
  142.       if(b= CreateBorder(0,0,w,h,FALSE))
  143.       {
  144.         if(a) a->NextBorder= b;
  145.         else a= b;
  146.  
  147.         g->NextGadget    = (struct Gadget *)NULL;
  148.         g->LeftEdge      = x;
  149.         g->TopEdge       = y;
  150.         g->Width         = w;
  151.         g->Height        = h;
  152.         g->Flags         = GADGHCOMP;
  153.         g->Activation    = GADGIMMEDIATE|RELVERIFY;
  154.         g->GadgetType    = BOOLGADGET;
  155.         g->GadgetRender  = (APTR)a;
  156.         g->SelectRender  = (APTR)NULL;
  157.         g->GadgetText    = (struct IntuiText *)NULL;
  158.         g->MutualExclude = (LONG)0L;
  159.         g->SpecialInfo   = (APTR)NULL;
  160.         g->GadgetID      = id;
  161.         g->UserData      = (APTR)NULL;
  162.  
  163.         MakePrivateHandlePublic(UserHandle);
  164.         return g;
  165.       }
  166.     }
  167.   }
  168.   if(UserHandle != PRIVATE_HANDLE)
  169.   { SmartFreeAll(PRIVATE_HANDLE);
  170.     (void)SetNewLookHandle(UserHandle);
  171.   }
  172.   return (struct Gadget *)NULL;
  173. }
  174.